﻿using System;
using System.Collections.Generic;
using BoneSystem.Business.Entity.ItemComercial.ProdutoMercadoria.ClassesRelacionadas;
using BoneSystem.Extensions.Annotations;
using BoneSystem.Extensions.Annotations.InputTypeAnnotations;
using BoneSystem.Extensions.Enum;

namespace BoneSystem.Business.Entity.ItemComercial.ProdutoMercadoria
{
    [Grid("dataList")]
    public class ProdutoMercadoria : ItemComercial,ICodeControl
    {
       
        #region Informações gerais

        public virtual string Codigo { get; set; }

        public virtual IList<Caracteristicas> Caracteristicas { get; set; }

        public virtual IList<String> Imagens { get; set; }
        [FileUpload]
        public virtual dynamic FileImages { get; set; }


            /// <summary>
        /// Cor predominante.
        /// </summary>
        [AutoComplete(
            TextField = "Nome", 
            SelectedItem = "dataObject.Cor", 
            PlaceHolder = "Cor do produto",
            ColSpan = 2,
            Display = "Cor",
            MinLength = 2,
            UrlData = "/AutoCompleteData/CorProdutoAutoCompleteData",
            UrlTemplate = "/AutoCompleteTemplate/CorProdutoAutoCompleteTemplate",
            Pause = 500,
            InputLarge = InputLargeEnum.XLarge)]
        [GridColumn(DisplayName = "Cor", Width = 300,FieldName = "Cor.Nome", Sortable = true)]
        public virtual CorProduto Cor { get; set; }

        #endregion
        
        #region Dados para venda.

        #endregion
        
        #region Dados para transporte

        [Float(Required = true,
            RequiredErrorMessage = Constants.MessageRequiredError,
            Max = Constants.MaxValorMonetario,
            Min = Constants.MinValorMonetario,
            Display = "Peso bruto",
            PlaceHolder = "Peso bruto")]
        [GridColumn(DisplayName = "Peso bruto", Width = 200)]
        public virtual decimal PesoBruto { get; set; }
        [Float(Required = true,
            RequiredErrorMessage = Constants.MessageRequiredError,
            Max = Constants.MaxValorMonetario,
            Min = Constants.MinValorMonetario,
            Display = "Peso líquido",
            PlaceHolder = "Peso líquido")]
        public virtual decimal PesoLiquido { get; set; }

        #endregion

        #region Dados de compra

        [Monetary(Required = true,
            RequiredErrorMessage = Constants.MessageRequiredError,
            Max = Constants.MaxValorMonetario,
            Min = Constants.MinValorMonetario,
            Display = "Custo atual",
            PlaceHolder = "Custo de produção")]
        [GridColumn(DisplayName = "Custo", Width = 200)]
        public virtual decimal CustoAtual { get; set; }

        [Monetary(Required = true,
            RequiredErrorMessage = Constants.MessageRequiredError,
            Max = Constants.MaxValorMonetario,
            Min = Constants.MinValorMonetario,
            Display = "Custo médio",
            PlaceHolder = "Custo médio")]
        [GridColumn(DisplayName = "Custo médio", Width = 200)]
        public virtual decimal CustoMedio { get; set; }

        #endregion

        #region Estoque
        [Float(Required = true,
            RequiredErrorMessage = Constants.MessageRequiredError,
            Max = Constants.MaxValorMonetario,
            Min = Constants.MinValorMonetario,
            Display = "Quantidade mínima",
            PlaceHolder = "Quantidade mínima")]
        public virtual decimal QuantidadeMinima { get; set; }
        [CheckBox(Required = true,
            RequiredErrorMessage = Constants.MessageRequiredError,
            Display = "Avisa estoque mínimo")]
        public virtual bool AvisaQuantidadeMinima { get; set; }

        #endregion

        #region Dados Adicionais

        [CheckBox(Required = true,
            RequiredErrorMessage = Constants.MessageRequiredError,
            Display = "Perecível")]
        public virtual bool IsPerecivel { get; set; }

        [Monetary(Required = true,
            RequiredErrorMessage = Constants.MessageRequiredError,
            Max = Constants.MaxValorMonetario,
            Min = Constants.MinValorMonetario,
            Display = "Validade",
            PlaceHolder = "Dias para vencimento")]
        [GridColumn(DisplayName = "Validade", Width = 200)]
        public virtual int PrazoValidade { get; set; }

        [CheckBox(Required = true,
            RequiredErrorMessage = Constants.MessageRequiredError,
            Display = "Frágil")]
        public virtual bool IsFragil { get; set; }


        #endregion

        
    }
}
